package org.aerie.forest.core.frame.rebar.factory;

import org.aerie.forest.core.frame.rebar.entity.AbstractForestRebar;
import org.aerie.forest.core.frame.rebar.entity.bootable.ForestBootable;
import org.aerie.forest.core.frame.rebar.entity.processer.AbstractForestProcessor;
import org.aerie.forest.core.frame.rebar.entity.processer.ProcessPack;
import org.aerie.forest.core.frame.rebar.entity.tool.ForestTool;

/**
 * @description forest架构元素的容器分类（亦是forest架构元素容器的枚举）
 *
 * @author quark
 * @organization aerie
 * @date 2020年2月27日 下午4:14:08
 * @version 1.2.0
 */
enum ForestRebarContainerCategory implements ForestFactoryComponent {

	/**
	 * @description 启动器
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午4:14:28
	 * @version 1.2.0
	 */
	BOOTABLE(new ForestRebarContainer<ForestBootable>() {
	}),

	/**
	 * @description 处理器
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午4:14:35
	 * @version 1.2.0
	 */
	PROCESSER(new ForestRebarContainer<AbstractForestProcessor<ProcessPack, ?>>() {
	}),

	/**
	 * @description 工具
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午4:14:44
	 * @version 1.2.0
	 */
	TOOL(new ForestRebarContainer<ForestTool>() {
	});

	/**
	 * @description forest架构元素容器
	 * 
	 * @author quark
	 * @date 2020年2月27日 下午4:14:52
	 * @version 1.2.0
	 */
	private final ForestRebarContainer<? extends AbstractForestRebar> forestRebarContainer;

	/**
	 * Construction
	 * 
	 * @param forestRebarContainer forest架构元素容器
	 *
	 * @date 2020年2月27日 下午4:15:03
	 * @version 1.2.0
	 */
	private ForestRebarContainerCategory(ForestRebarContainer<? extends AbstractForestRebar> forestRebarContainer) {
		this.forestRebarContainer = forestRebarContainer;
	}

	/**
	 * @description 获得容器的泛型
	 * @return 类型
	 *
	 * @date 2020年2月27日 下午4:15:16
	 * @version 1.2.0
	 */
	public Class<? extends AbstractForestRebar> getZclass() {
		return forestRebarContainer.getGenericityZclass();
	}

	/**
	 * @description 获得容器
	 * @return 容器
	 *
	 * @date 2020年2月27日 下午4:29:44
	 * @version 1.2.0
	 */
	ForestRebarContainer<? extends AbstractForestRebar> getForestRebarContainer() {
		return forestRebarContainer;
	}

}
